package vistas;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import juego.Escenario;
import programa.Partida;
import excepciones.ErrorAlCargarArchivo;

/*
 * Vista de la pantalla mostrada al final de cada nivel. Se usa esta clase tanto si
 * se gan� el nivel como si se perdi�. 
 */
public class VistaFinNivel extends JPanel {
	private static final long serialVersionUID = 1L;
	private JButton GuardarPartida = null;
	private JButton SiguienteNivel = null;
	private JButton volver = null;
	private JButton Salida = null;

	public VistaFinNivel(boolean gano) {
		super();
		this.setSize(new Dimension(720, 700));
		this.setBackground(Color.BLACK);
		this.setLayout(null);
		JLabel fondo = new JLabel();
		fondo.setBounds(new Rectangle(-3, 0, 720, 650));
		fondo
				.setIcon(new ImageIcon(getClass().getResource(
						"/images/fondo.jpg")));
		fondo.setBackground(Color.BLACK);
		JLabel mostrarPiloto = new JLabel();
		mostrarPiloto.setBounds(new Rectangle(220, 163, 286, 40));
		mostrarPiloto.setFont(new Font("Monotype Corsiva", Font.PLAIN, 24));
		mostrarPiloto.setForeground(new Color(0, 102, 255));
		mostrarPiloto.setText("Piloto: "
				+ Partida.getInstance().getJugador().getNombre());
		this.add(getPuntaje(Escenario.getInstance().getActor().getPuntaje()));
		this.add(getCivilKills(Escenario.getInstance().getCivilesDestruidos()));
		this
				.add(getEnemyKills(Escenario.getInstance()
						.getEnemigosDestruidos()));
		if (gano) {
			this.add(getGuardarPartida());
			this.add(getSiguienteNivel());
			this.add(getMensaje("GANASTE!", Color.GREEN));
		} else {
			this.add(getMensaje("Perdiste...", Color.RED));
		}
		this.add(getVolverMenuPrincipal());
		this.add(getSalida());
		this.add(mostrarPiloto);
		this.add(fondo);
	}

	public void setVisible(Boolean bool) {
		this.setVisible(bool);
		GuardarPartida.setVisible(bool);
		SiguienteNivel.setVisible(bool);
		volver.setVisible(bool);
		Salida.setVisible(bool);

	}

	private JButton getGuardarPartida() {
		GuardarPartida = new JButton();
		GuardarPartida.setMnemonic(KeyEvent.VK_UNDEFINED);
		GuardarPartida.setSize(new Dimension(130, 30));
		GuardarPartida.setLocation(new Point(80, 470));
		GuardarPartida.setText("Guardar partida");
		GuardarPartida.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				try {
					Partida.getInstance().guardarPartida();
				} catch (ErrorAlCargarArchivo e1) {
					e1.printStackTrace();
				}
			}
		});
		return GuardarPartida;
	}

	private JButton getSiguienteNivel() {
		SiguienteNivel = new JButton();
		SiguienteNivel.setText("Siguiente nivel");
		SiguienteNivel.setSize(new Dimension(130, 30));
		SiguienteNivel.setLocation(new Point(220, 470));
		SiguienteNivel.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				Partida.getInstance().siguienteNivel();
			}
		});
		return SiguienteNivel;
	}

	private JButton getSalida() {
		Salida = new JButton();
		Salida.setText("SALIR");
		Salida.setSize(new Dimension(130, 30));
		Salida.setLocation(new Point(360, 600));
		Salida.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				if (Partida.getInstance().confirmarSalida()) {
					System.exit(0);
				}
			}
		});
		return Salida;
	}

	private JButton getVolverMenuPrincipal() {
		volver = new JButton();
		volver.setText("Volver al menu principal");
		volver.setSize(new Dimension(260, 30));
		volver.setLocation(new Point(360, 470));
		volver.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				Partida.getInstance().irAlMenuPrincipal();
			}
		});
		return volver;
	}

	public static JLabel getPuntaje(int puntos) {
		JLabel puntaje = new JLabel();
		puntaje.setBounds(new Rectangle(60, 260, 400, 30));
		puntaje.setFont(new Font("Verdana", Font.PLAIN, 20));
		puntaje.setForeground(new Color(255, 255, 255));
		puntaje.setText("En este nivel has sumado " + puntos + " puntos");
		return puntaje;
	}

	public static JLabel getEnemyKills(int kills) {
		JLabel unitKill = new JLabel();
		unitKill.setBounds(new Rectangle(60, 310, 400, 30));
		unitKill.setFont(new Font("Verdana", Font.PLAIN, 20));
		unitKill.setForeground(new Color(255, 255, 255));
		unitKill.setText("Has matado " + kills + " aviones enemigos");
		return unitKill;
	}

	public static JLabel getCivilKills(int kills) {
		JLabel unitKill = new JLabel();
		unitKill.setBounds(new Rectangle(60, 360, 400, 30));
		unitKill.setFont(new Font("Verdana", Font.PLAIN, 20));
		unitKill.setForeground(new Color(255, 255, 255));
		unitKill.setText("Has matado " + kills + " aviones civiles");
		return unitKill;
	}

	public static JLabel getMensaje(String mensaje, Color color) {
		JLabel unitKill = new JLabel();
		unitKill.setBounds(new Rectangle(60, 210, 400, 30));
		unitKill.setFont(new Font("Verdana", Font.PLAIN, 20));
		unitKill.setForeground(color);
		unitKill.setText(mensaje);
		return unitKill;
	}

}